


import bpy

from bpy.types import Operator, Menu

from 全局控制.Node.数据编辑.物体 import bl_修改器公共选项

import 全局控制.Node.节点和插座基类.bl_节点基类 as 基类








def f_update_修改器打开(self, context):
	修改对象 = self.inputs['修改对象'].f_getData()
	if len(修改对象) <= 0 : return False

	for obj in 修改对象:
		修改器 = bl_修改器公共选项.f_取约束修改器(self, obj, 'TRANSFORM')
		if 修改器 != None :
			修改器.mute = self.m_是否打开




class C_Node_变换约束修改器(基类.C_SN_基类):
	bl_dname = 'bl_node_变换约束修改器'
	bl_label = '变换约束修改器'
	
	m_修改器名称 = bpy.props.StringProperty(name="修改器名称", default='变换约束修改器')
	m_是否打开 = bpy.props.BoolProperty(default=True, update=f_update_修改器打开)
	
	
	def init(self, context):
		super(C_Node_变换约束修改器, self).f_init(context)

		self.inputs.new('C_NodeSocket_物体', name='修改对象')

		self.inputs.new('C_NodeSocket_物体', name='参考目标')


		self.inputs.new('C_NodeSocket_bool', name='延伸')

		self.inputs.new('C_NodeSocket_i', name='源变换方式')
		self.inputs.new('C_Socket1D_Vec2', name='源:x')
		self.inputs.new('C_Socket1D_Vec2', name='源:y')
		self.inputs.new('C_Socket1D_Vec2', name='源:z')
		
		self.inputs.new('C_NodeSocket_i', name='映射模式轴X')
		self.inputs.new('C_NodeSocket_i', name='映射模式轴Y')
		self.inputs.new('C_NodeSocket_i', name='映射模式轴Z')

		self.inputs.new('C_NodeSocket_i', name='目标变换方式')
		self.inputs.new('C_Socket1D_Vec2', name='目标:x')
		self.inputs.new('C_Socket1D_Vec2', name='目标:y')
		self.inputs.new('C_Socket1D_Vec2', name='目标:z')

		self.inputs.new('C_NodeSocket_i', name='目标变换方式')

		


	def draw_buttons(self, context, layout):
		bl_修改器公共选项.f_约束修改器_头选项绘制(self, layout, '自设变换')
		layout.separator()
		
			
	def update(self):
		pass
		

	def f_update(self, 是否向下传递=False, input插座=None):
		
		super(C_Node_变换约束修改器, self).f_update(是否向下传递, input插座)




class C_NODE_MENU_变换约束修改器(bpy.types.Operator):
	bl_idname = 'node.global_node_obj_constraints_transformation'
	bl_label = '变换约束修改器'
	bl_options = {'REGISTER', 'UNDO'}
	def execute(operator, context):
		bpy.ops.node.add_node(type='C_Node_变换约束修改器', use_transform=True)
		return {'FINISHED'}





classes = (
	C_Node_变换约束修改器,
	C_NODE_MENU_变换约束修改器,
)

def register():
	for c in classes:
		bpy.utils.register_class(c)
		
def unregister():
	for c in classes:
		bpy.utils.unregister_class(c)


